android 权限申请PermissionUtil 您所在的位置:网站首页 recognition to sb android 权限申请PermissionUtil

android 权限申请PermissionUtil

2023-11-29 23:24| 来源: 网络整理| 查看: 265

android 权限申请–在activity之外申请权限 1、android 权限申请工具类库

在申请权限时,最不爽的是权限申请结果的回调在activity中,如果在其他地方需要使用危险权限时非常不方便。为了解决这个问题,本类库中在申请权限时,会启动一个透明的activity—PermissionActivity,系统的回调在PermissionActivity中处理,然后在回调给使用的地方,并销毁 PermissionActivity。

特点: 可以在任意地方发起权限申请;可以统一处理权限回调;新增维护一个请求队列,依次处理请求,在连续多次发起请求时,不会造成回调冲突。已经拥有申请的全部权限或api版本小于23,都会返回申请成功。 2、效果

申请时拒绝,拒绝后会回调被拒绝的权限,可以对被拒绝的权限进行说明,并重新申请。 在这里插入图片描述 申请时权限被拒绝,并勾选了不再询问,会回调被禁止的权限,可以请求用户去设置里面打开。 在这里插入图片描述

3、使用方式一:单独处理失败回调

注册权限

要申请的权限

final String[] permission= new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA, Manifest.permission.READ_PHONE_STATE};

要申请权限的回调

PermissionCallback callback=new PermissionCallback() { @Override public void onPermissionGranted() { toast("权限申请成功--方式1"); } @Override public void shouldShowRational(final RequestBean requestBean,String[] rationalPermissons, final boolean before) { StringBuilder sb=new StringBuilder(); sb.append("我们将获取以下权限:\n\n"); for(int i=0;i sb.append("读写设备外部存储空间的权限,将被用于获取用户头像、保存一些文件到项目文件夹中"); }else if(Manifest.permission.CAMERA.equals(rationalPermissons[i])){ sb.append("使用摄像头的权限将,被用于拍照获取用户头像,直播视频采集"); }else if(Manifest.permission.READ_PHONE_STATE.equals(rationalPermissons[i])){ sb.append("读取手机状态信息的权限,将被用于登录时账号验证"); }else if(Manifest.permission.RECORD_AUDIO.equals(rationalPermissons[i])){ sb.append("录制引起的权限,将被用于直播音频采集"); } if(i==rationalPermissons.length-1){ sb.append("。"); }else{ sb.append(";"); } sb.append("\n"); } PermissionUtil.showDialog(MainActivity.this, sb.toString(), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); //重新申请权限 PermissionUtil.requestAgain(MainActivity.this,requestBean); } }); } @Override public void onPermissonReject(String[] rejectPermissons) { StringBuilder sb=new StringBuilder(); sb.append("我们需要的权限:\n\n"); for(int i=0;i sb.append("读写外部存储空间的权限,将被用于获取用户头像、保存一些文件到项目文件夹中"); }else if(Manifest.permission.CAMERA.equals(rejectPermissons[i])){ sb.append("使用摄像头的权限,被用于拍照获取用户头像,直播视频采集"); }else if(Manifest.permission.READ_PHONE_STATE.equals(rejectPermissons[i])){ sb.append("读取手机状态信息的权限,将被用于登录时账号验证"); }else if(Manifest.permission.RECORD_AUDIO.equals(rejectPermissons[i])){ sb.append("录制引起的权限,将被用于直播音频采集"); } if(i==rejectPermissons.length-1){ sb.append("。"); }else{ sb.append(";"); } sb.append("\n"); } sb.append("\n被设为禁止,请到设置里开启权限"); PermissionUtil.showDialog(MainActivity.this, sb.toString(), getString(R.string.dialog_cancel), getString(R.string.dialog_go_setting), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); //重新申请权限 PermissionUtil.startSettingsActivity(MainActivity.this); } } ); } };

发起权限申请

PermissionUtil.request(MainActivity.this,permission,callback); 4、使用方式二:统一处理失败回调

在权限申请前设置统一回调,比如application里面

/** 申请失败的回调,整个app只需设置一次,统一在一个地方处理 */ PermissionUtil.setFailedCallBack(new FailedCallBack() { @Override public void shouldShowRational(final RequestBean requestBean,String[] rationalPermissons, boolean before) { StringBuilder sb=new StringBuilder(); sb.append("我们需要获取以下权限:\n\n"); for(int i=0;i sb.append("读写设备外部存储空间的权限,将被用于获取用户头像、保存一些文件到项目文件夹中"); }else if(Manifest.permission.CAMERA.equals(rationalPermissons[i])){ sb.append("使用摄像头的权限,将被用于拍照获取用户头像,直播视频采集"); }else if(Manifest.permission.READ_PHONE_STATE.equals(rationalPermissons[i])){ sb.append("读取手机状态信息的权限,将被用于登录时账号验证"); }else if(Manifest.permission.RECORD_AUDIO.equals(rationalPermissons[i])){ sb.append("录制引起的权限,将被用于直播音频采集"); } if(i==rationalPermissons.length-1){ sb.append("。"); }else{ sb.append(";"); } sb.append("\n"); } //弹出提示dialog PermissionUtil.showDialog(MainActivity.this, sb.toString(), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); //重新申请权限 PermissionUtil.requestAgain(MainActivity.this,requestBean); } }); } @Override public void onPermissonReject(String[] rejectPermissons) { StringBuilder sb=new StringBuilder(); sb.append("我们需要的权限:\n\n"); for(int i=0;i sb.append("读写外部存储空间的权限,将被用于获取用户头像、保存一些文件到项目文件夹中"); }else if(Manifest.permission.CAMERA.equals(rejectPermissons[i])){ sb.append("使用摄像头的权限,被用于拍照获取用户头像,直播视频采集"); }else if(Manifest.permission.READ_PHONE_STATE.equals(rejectPermissons[i])){ sb.append("读取手机状态信息的权限,将被用于登录时账号验证"); }else if(Manifest.permission.RECORD_AUDIO.equals(rejectPermissons[i])){ sb.append("录制引起的权限,将被用于直播音频采集"); } if(i==rejectPermissons.length-1){ sb.append("。"); }else{ sb.append(";"); } sb.append("\n"); } sb.append("\n被设为禁止,请到设置里开启权限"); //弹出提示dialog PermissionUtil.showDialog(MainActivity.this, sb.toString(), getString(R.string.dialog_cancel), getString(R.string.dialog_go_setting), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); //重新申请权限 PermissionUtil.startSettingsActivity(MainActivity.this); } } ); } });

权限申请时设置成功的回调

/** 申请结果处理方式二 */ findViewById(R.id.text_view02).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //申请权限 PermissionUtil.request(MainActivity.this, permission, new SuccessCallback(){ @Override public void onPermissionGranted() { toast("权限申请成功--方式2"); } }); } 5、源码

github 喜欢的小伙伴点下star 哈哈。

github慢也可以下载压缩包



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有